package com.cn.service.impl;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

import com.cn.dao.CartDao;
import com.cn.dao.OrderDao;
import com.cn.dao.OrderDetailDao;
import com.cn.dao.ProductCategoryDao;
import com.cn.dao.UserDao;
import com.cn.dao.impl.CartDaoImpl;
import com.cn.dao.impl.OrderDaoImpl;
import com.cn.dao.impl.OrderDetailDaoImpl;
import com.cn.dao.impl.ProductCategoryDaoImpl;
import com.cn.dao.impl.UserDaoImpl;
import com.cn.domain.Cart;
import com.cn.domain.Order;
import com.cn.domain.OrderDetail;
import com.cn.domain.Product;
import com.cn.service.CartService;
import com.cn.service.OrderService;
import com.cn.utils.DBUtils;

public class OrderServiceImpl implements OrderService{

	private OrderDao orderDao=new OrderDaoImpl();
	private ProductCategoryDao pcDao=new ProductCategoryDaoImpl();
	private OrderDetailDao orderDetailDao=new OrderDetailDaoImpl();
	private CartService cartDao=new CartServiceImpl();
	//1:订单插入还需要插入订单详情
	//2:并且也要删除购物车里的记录
	//3:而却还要更新商品表里的库存量
	@Override
	public int addOrder(Cart cart) {
		int i=0;
		//cart.setUserid(1036);//这里只需要一个userid号就可以了
		//获取连接
		Connection conn=DBUtils.getConn();
		try {
			//设置手动提交
			conn.setAutoCommit(false);
		} catch (SQLException e2) {
			e2.printStackTrace();
		}
		//根据用户的ID搜索购物车所有信息
		List<Cart> cartList=cartDao.queryAllCart(cart.getUserid());
		if(cartList!=null && cartList.size()>0) {
			//开始添加到数据库中
			for(Cart ca:cartList) {
				//将购物车的信息所有都添加到订单表中
				try {
					//1插入订单成功!
					if(orderDao.addOrder(ca,conn)>0) {
						
						conn.commit();//先提交一次
						//2然后才可以进行插入订单详情表插入
						Order order=orderDao.queryCartByTime();//可以查出刚刚插入的ID号 
						ca.setOrder(order);
						//开始插入到订单详情表中
						if(orderDao.addDatiles(ca,conn)>0) {
							System.out.println("---成功!");
							//这里还得根据PID更新product表中的库存
							//原来的库存量
							Product product=pcDao.queryProById(ca.getProduct().getHp_id()+"");
							long stock=product.getHp_stock();//得到库存量
							long caNum=ca.getQuantity();//得带该物品购买数量
							
							long newNum=stock-caNum;
							if(newNum<=0) {
								//库存不足.库存赋值为0
								stock=0;
							}
							//接着更新库存
							if(pcDao.updateStockByProId(newNum,ca.getProduct().getHp_id())>0) {
								//开始去删除购物车对应的用户的商品信息
								if(cartDao.delCartByPidAndUserId(ca.getPid(),ca.getUserid())>0) {
									//成功之后就可以提交事务啦
									conn.commit();
									i=1;
								}
							}
						}
					}
				}catch(Exception e) {
					//事务回滚
					try {
						conn.rollback();
					} catch (SQLException e1) {
						e1.printStackTrace();
					}
				}
			}
			//关闭连接
			DBUtils.close(conn);
		}
		return i;
	}

	@Override
	public List<Order> queryAllOrder(long userId) {
		
		List<Order> newOrderList=new ArrayList();
		List<Order> orderList=orderDao.queryAllOrder(userId);
		if(orderList!=null && orderList.size()>0) {
			for(Order order:orderList) {
				//开始封装
				//User user=userDao.queryUserByKey("HU_USER_ID", order.getHo_user_id()+"");
				//order.setHo_user_id(user.getHu_user_id());
				//这里面就包含了对应的PID
				OrderDetail detail=orderDetailDao.queryOrderDetByOrderId(order.getHo_id());
				Product product=null;
				if(detail!=null) {
					product=pcDao.queryProById(detail.getHp_id()+"");
					detail.setProduct(product);
				}
				//然后存放到order表中去
				order.setOrderDetail(detail);
				newOrderList.add(order);
			}
		}
		return newOrderList;
	}

	@Override
	public Cart queryCartById(String id) {
		
		return null;
	}

	@Override
	public Order queryCartByTime() {
		return orderDao.queryCartByTime();
	}

	//查询分页后的订单
	@Override
	public List<Order> queryOrdersPage(long userId, int pageNow, int pageSize) {
		//新容器用于装在满足条件的所有订单
		List<Order> newOrderList=new ArrayList();
		//获取分页后的订单记录
		List<Order> orderList=orderDao.queryOrdersPage(userId, pageNow, pageSize);
		
		//获取所有的订单详情记录
		List<OrderDetail> queryAllOrderDetail = orderDetailDao.queryAllOrderDetail();
		
		//获取所有的产品记录
		List<Product> queryAllProduct = pcDao.queryAllProduct();
		
		if(orderList!=null && orderList.size()>0){
			//开始遍历
			for(Order order:orderList){
				if(queryAllOrderDetail!=null&&queryAllOrderDetail.size()>0){
					for(OrderDetail orderDe:queryAllOrderDetail){
						if(queryAllProduct!=null&&queryAllProduct.size()>0){
							for(Product product:queryAllProduct){
								//开始搜索
								if(order.getHo_id()==orderDe.getHo_id()&&orderDe.getHp_id()==product.getHp_id()){
									order.setOrderDetail(orderDe);
									order.setProduct(product);
									newOrderList.add(order);	
								}
							}
						}
					}
				}
			}
		}
		return newOrderList;
	}

	//获取订单总条数
	@Override
	public int queryOrdersByUserId(long userId) {
		return orderDao.queryOrdersByUserId(userId);
	}
}
